﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections.ObjectModel;

namespace Vista.Seguridad
{
    public partial class FormGestionarGrupos : Form
    {

        private Entidades.Seguridad.Usuario _Usuario;
        private ReadOnlyCollection<Entidades.Seguridad.Perfil> _Perfiles;
        private static FormGestionarGrupos instancia;
        
        BindingSource bsGrupos;
        ReadOnlyCollection<Entidades.Seguridad.Grupo> colGrupos;

        public static FormGestionarGrupos obtener_instancia(Entidades.Seguridad.Usuario oUsuario)
        {
            if (instancia == null)
                instancia = new FormGestionarGrupos(oUsuario);
            if (instancia.IsDisposed)
                instancia = new FormGestionarGrupos(oUsuario);

            return instancia;
        }

        public FormGestionarGrupos(Entidades.Seguridad.Usuario oUsuario)
        {
            InitializeComponent();
            _Usuario = new Entidades.Seguridad.Usuario();
            _Usuario = oUsuario;

            _Perfiles = Controladora.Seguridad.CUIniciarSesion.ObtenerInstancia().RecuperarPerfilesGrupos(_Usuario);

            this.CenterToScreen();

            foreach (Entidades.Seguridad.Perfil perfil in _Perfiles)
            {
                if (this.Text == perfil.Formulario.Nombre)
                {
                    foreach (Control control in this.Controls)
                    {
                        if (control is Button)
                        {
                            Button boton = (Button)control;

                            if (perfil.Permiso.Nombre == boton.Text) boton.Enabled = true;
                        }
                    }
                }
            }
        }
        private void FormGestionarGrupos_Load(object sender, EventArgs e)
        {
            CargarGrilla();
            cmbEstado.DataSource = cargacmbEstadoGrupos();
            cmbEstado.DisplayMember = "ESTADO";
            cmbEstado.ValueMember = "CODIGO";
        }

        public void CargarGrilla()
        {
            bsGrupos = new BindingSource();
            colGrupos = Controladora.Seguridad.CUGestionargrupos.ObtenerInstancia().ConsultarGrupos();
            bsGrupos.DataSource = colGrupos;
            dgvgrupos.DataSource = bsGrupos;            
        }

        private void btnfiltrar_Click(object sender, EventArgs e)
        {
            colGrupos = Controladora.Seguridad.CUGestionargrupos.ObtenerInstancia().ConsultarGrupos(txtDescGrupo.Text, cmbEstado.SelectedValue.ToString());
            bsGrupos.DataSource = colGrupos;
            dgvgrupos.DataSource = bsGrupos;
        }

        public void ActularizarGrilla()
        {
            bsGrupos.ResetBindings(false);
        }

        private void btneliminar_Click(object sender, EventArgs e)
        {
            DialogResult dialogo;
            dialogo = MessageBox.Show("¿Esta seguro que desea eliminar el Grupo?", "ADVERTENCIA", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (dialogo == System.Windows.Forms.DialogResult.Yes)
            {
                Controladora.Seguridad.CUGestionargrupos.ObtenerInstancia().EliminarGrupos((Entidades.Seguridad.Grupo)bsGrupos.Current);
                this.actualizargrilla();
            }
        }

        private void btnagregar_Click(object sender, EventArgs e)
        {
            FormGrupos frmGrupos = new FormGrupos("Nuevo");
            frmGrupos.ShowDialog();
            this.actualizargrilla();
        }

        private void actualizargrilla()
        {
            this.bsGrupos.ResetBindings(false);
        }

        private void btnmodificar_Click(object sender, EventArgs e)
        {
            if (bsGrupos.Count == 0)
            {
                MessageBox.Show("No hay grupos a modificar");
            }
            else
            {
                FormGrupos frmGrupos = new FormGrupos("Modificar", (Entidades.Seguridad.Grupo)bsGrupos.Current);
                frmGrupos.ShowDialog();
                this.actualizargrilla();
            }
        }

        private void btncerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        public DataTable cargacmbEstadoGrupos()
        {
            System.Data.DataTable dtESTADOS = new System.Data.DataTable();
            System.Data.DataColumn dtcESTADO = new System.Data.DataColumn("CODIGO", typeof(String));
            dtESTADOS.Columns.Add(dtcESTADO);
            dtcESTADO = new System.Data.DataColumn("ESTADO", typeof(String));
            dtESTADOS.Columns.Add(dtcESTADO);
            System.Data.DataRow drESTADO = dtESTADOS.NewRow();

            drESTADO = dtESTADOS.NewRow();
            drESTADO["CODIGO"] = "T";
            drESTADO["ESTADO"] = "TODOS";
            dtESTADOS.Rows.Add(drESTADO);

            drESTADO = dtESTADOS.NewRow();
            drESTADO["CODIGO"] = "A";
            drESTADO["ESTADO"] = "HABILITADOS";
            dtESTADOS.Rows.Add(drESTADO);

            drESTADO = dtESTADOS.NewRow();
            drESTADO["CODIGO"] = "I";
            drESTADO["ESTADO"] = "INHABILITADOS";
            dtESTADOS.Rows.Add(drESTADO);

            return dtESTADOS;
        }
    }
}
